home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / quake_ad.zip / RESPAWN.ZIP / SRC / KNIGHT.QC < prev    next >
Text File  |  1997-03-16  |  14KB  |  357 lines

  1. /*
  2. ==============================================================================
  3.  
  4. KNIGHT
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd id1/models/knight
  10. $origin 0 0 24
  11. $base base
  12. $skin badass3
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame runb1 runb2 runb3 runb4 runb5 runb6 runb7 runb8
  17.  
  18. //frame runc1 runc2 runc3 runc4 runc5 runc6
  19.  
  20. $frame runattack1 runattack2 runattack3 runattack4 runattack5
  21. $frame runattack6 runattack7 runattack8 runattack9 runattack10
  22. $frame runattack11
  23.  
  24. $frame pain1 pain2 pain3
  25.  
  26. $frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9
  27. $frame painb10 painb11
  28.  
  29. //frame attack1 attack2 attack3 attack4 attack5 attack6 attack7
  30. //frame attack8 attack9 attack10 attack11
  31.  
  32. $frame attackb1 attackb1 attackb2 attackb3 attackb4 attackb5
  33. $frame attackb6 attackb7 attackb8 attackb9 attackb10
  34.  
  35. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9
  36. $frame walk10 walk11 walk12 walk13 walk14
  37.  
  38. $frame kneel1 kneel2 kneel3 kneel4 kneel5
  39.  
  40. $frame standing2 standing3 standing4 standing5
  41.  
  42. $frame death1 death2 death3 death4 death5 death6 death7 death8
  43. $frame death9 death10
  44.  
  45. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  46. $frame deathb9 deathb10 deathb11
  47.  
  48. //--------------------------------------------------------- New Code --------
  49. void() knight_die11;
  50. void() knight_dieb12;
  51. //---------------------------------------------------------------------------
  52.  
  53. void()    knight_stand1    =[    $stand1,    knight_stand2    ] {ai_stand();};
  54. void()    knight_stand2    =[    $stand2,    knight_stand3    ] {ai_stand();};
  55. void()    knight_stand3    =[    $stand3,    knight_stand4    ] {ai_stand();};
  56. void()    knight_stand4    =[    $stand4,    knight_stand5    ] {ai_stand();};
  57. void()    knight_stand5    =[    $stand5,    knight_stand6    ] {ai_stand();};
  58. void()    knight_stand6    =[    $stand6,    knight_stand7    ] {ai_stand();};
  59. void()    knight_stand7    =[    $stand7,    knight_stand8    ] {ai_stand();};
  60. void()    knight_stand8    =[    $stand8,    knight_stand9    ] {ai_stand();};
  61. void()    knight_stand9    =[    $stand9,    knight_stand1    ] {ai_stand();};
  62.  
  63. void()    knight_walk1    =[    $walk1,        knight_walk2    ] {
  64. if (random() < 0.2)
  65.     sound (self, CHAN_VOICE, "knight/idle.wav", 1,  ATTN_IDLE);
  66. ai_walk(3);};
  67. void()    knight_walk2    =[    $walk2,        knight_walk3    ] {ai_walk(2);};
  68. void()    knight_walk3    =[    $walk3,        knight_walk4    ] {ai_walk(3);};
  69. void()    knight_walk4    =[    $walk4,        knight_walk5    ] {ai_walk(4);};
  70. void()    knight_walk5    =[    $walk5,        knight_walk6    ] {ai_walk(3);};
  71. void()    knight_walk6    =[    $walk6,        knight_walk7    ] {ai_walk(3);};
  72. void()    knight_walk7    =[    $walk7,        knight_walk8    ] {ai_walk(3);};
  73. void()    knight_walk8    =[    $walk8,        knight_walk9    ] {ai_walk(4);};
  74. void()    knight_walk9    =[    $walk9,        knight_walk10    ] {ai_walk(3);};
  75. void()    knight_walk10    =[    $walk10,    knight_walk11    ] {ai_walk(3);};
  76. void()    knight_walk11    =[    $walk11,    knight_walk12    ] {ai_walk(2);};
  77. void()    knight_walk12    =[    $walk12,    knight_walk13    ] {ai_walk(3);};
  78. void()    knight_walk13    =[    $walk13,    knight_walk14    ] {ai_walk(4);};
  79. void()    knight_walk14    =[    $walk14,    knight_walk1    ] {ai_walk(3);};
  80.  
  81.  
  82. void()    knight_run1    =[    $runb1,        knight_run2    ] {
  83. if (random() < 0.2)
  84.     sound (self, CHAN_VOICE, "knight/idle.wav", 1,  ATTN_IDLE);
  85. ai_run(16);};
  86. void()    knight_run2    =[    $runb2,        knight_run3    ] {ai_run(20);};
  87. void()    knight_run3    =[    $runb3,        knight_run4    ] {ai_run(13);};
  88. void()    knight_run4    =[    $runb4,        knight_run5    ] {ai_run(7);};
  89. void()    knight_run5    =[    $runb5,        knight_run6    ] {ai_run(16);};
  90. void()    knight_run6    =[    $runb6,        knight_run7    ] {ai_run(20);};
  91. void()    knight_run7    =[    $runb7,        knight_run8    ] {ai_run(14);};
  92. void()    knight_run8    =[    $runb8,        knight_run1    ] {ai_run(6);};
  93.  
  94.  
  95. void()    knight_runatk1    =[    $runattack1,        knight_runatk2    ]
  96. {
  97. if (random() > 0.5)
  98.     sound (self, CHAN_WEAPON, "knight/sword2.wav", 1, ATTN_NORM);
  99. else
  100.     sound (self, CHAN_WEAPON, "knight/sword1.wav", 1, ATTN_NORM);
  101. ai_charge(20);
  102. };
  103. void()    knight_runatk2    =[    $runattack2,    knight_runatk3    ] {ai_charge_side();};
  104. void()    knight_runatk3    =[    $runattack3,    knight_runatk4    ] {ai_charge_side();};
  105. void()    knight_runatk4    =[    $runattack4,    knight_runatk5    ] {ai_charge_side();};
  106. void()    knight_runatk5    =[    $runattack5,    knight_runatk6    ] {ai_melee_side();};
  107. void()    knight_runatk6    =[    $runattack6,    knight_runatk7    ] {ai_melee_side();};
  108. void()    knight_runatk7    =[    $runattack7,    knight_runatk8    ] {ai_melee_side();};
  109. void()    knight_runatk8    =[    $runattack8,    knight_runatk9    ] {ai_melee_side();};
  110. void()    knight_runatk9    =[    $runattack9,    knight_runatk10    ] {ai_melee_side();};
  111. void()    knight_runatk10    =[    $runattack10,    knight_runatk11    ] {ai_charge_side();};
  112. void()    knight_runatk11    =[    $runattack11,    knight_run1    ] {ai_charge(10);};
  113.  
  114. void()    knight_atk1    =[    $attackb1,        knight_atk2    ]
  115. {
  116. sound (self, CHAN_WEAPON, "knight/sword1.wav", 1, ATTN_NORM);
  117. ai_charge(0);};
  118. void()    knight_atk2    =[    $attackb2,        knight_atk3    ] {ai_charge(7);};
  119. void()    knight_atk3    =[    $attackb3,        knight_atk4    ] {ai_charge(4);};
  120. void()    knight_atk4    =[    $attackb4,        knight_atk5    ] {ai_charge(0);};
  121. void()    knight_atk5    =[    $attackb5,        knight_atk6    ] {ai_charge(3);};
  122. void()    knight_atk6    =[    $attackb6,        knight_atk7    ] {ai_charge(4); ai_melee();};
  123. void()    knight_atk7    =[    $attackb7,        knight_atk8    ] {ai_charge(1); ai_melee();};
  124. void()    knight_atk8    =[    $attackb8,        knight_atk9    ] {ai_charge(3);
  125. ai_melee();};
  126. void()    knight_atk9    =[    $attackb9,        knight_atk10] {ai_charge(1);};
  127. void()    knight_atk10=[    $attackb10,        knight_run1    ] {ai_charge(5);};
  128.  
  129. //void()    knight_atk9    =[    $attack9,        knight_atk10    ] {};
  130. //void()    knight_atk10    =[    $attack10,        knight_atk11    ] {};
  131. //void()    knight_atk11    =[    $attack11,        knight_run1    ] {};
  132.  
  133. //===========================================================================
  134.  
  135. void()    knight_pain1    =[    $pain1,        knight_pain2    ] {};
  136. void()    knight_pain2    =[    $pain2,        knight_pain3    ] {};
  137. void()    knight_pain3    =[    $pain3,        knight_run1    ] {};
  138.  
  139. void()    knight_painb1    =[    $painb1,    knight_painb2    ] {ai_painforward(0);};
  140. void()    knight_painb2    =[    $painb2,    knight_painb3    ] {ai_painforward(3);};
  141. void()    knight_painb3    =[    $painb3,    knight_painb4    ] {};
  142. void()    knight_painb4    =[    $painb4,    knight_painb5    ] {};
  143. void()    knight_painb5    =[    $painb5,    knight_painb6    ] {ai_painforward(2);};
  144. void()    knight_painb6    =[    $painb6,    knight_painb7    ] {ai_painforward(4);};
  145. void()    knight_painb7    =[    $painb7,    knight_painb8    ] {ai_painforward(2);};
  146. void()    knight_painb8    =[    $painb8,    knight_painb9    ] {ai_painforward(5);};
  147. void()    knight_painb9    =[    $painb9,    knight_painb10    ] {ai_painforward(5);};
  148. void()    knight_painb10    =[    $painb10,    knight_painb11    ] {ai_painforward(0);};
  149. void()    knight_painb11    =[    $painb11,    knight_run1    ] {};
  150.  
  151. void(entity attacker, float damage)    knight_pain =
  152. {
  153.     local float r;
  154.  
  155.     if (self.pain_finished > time)
  156.         return;
  157.  
  158.     r = random();
  159.     
  160.     sound (self, CHAN_VOICE, "knight/khurt.wav", 1, ATTN_NORM);
  161.     if (r < 0.85)
  162.     {
  163.         knight_pain1 ();
  164.         self.pain_finished = time + 1;
  165.     }
  166.     else
  167.     {
  168.         knight_painb1 ();
  169.         self.pain_finished = time + 1;
  170.     }
  171.     
  172. };
  173.  
  174. //===========================================================================
  175.  
  176. void()    knight_bow1    =[    $kneel1,        knight_bow2    ] {ai_turn();};
  177. void()    knight_bow2    =[    $kneel2,        knight_bow3    ] {ai_turn();};
  178. void()    knight_bow3    =[    $kneel3,        knight_bow4    ] {ai_turn();};
  179. void()    knight_bow4    =[    $kneel4,        knight_bow5    ] {ai_turn();};
  180.  
  181. void()    knight_bow5    =[    $kneel5,        knight_bow5    ] {ai_turn();};
  182.  
  183. void()    knight_bow6    =[    $kneel4,        knight_bow7    ] {ai_turn();};
  184. void()    knight_bow7    =[    $kneel3,        knight_bow8    ] {ai_turn();};
  185. void()    knight_bow8    =[    $kneel2,        knight_bow9    ] {ai_turn();};
  186. void()    knight_bow9    =[    $kneel1,        knight_bow10    ] {ai_turn();};
  187. void()    knight_bow10    =[    $walk1,        knight_walk1    ] {ai_turn();};
  188.  
  189.  
  190.  
  191. //--------------------------------------------------------- New Code --------
  192. //  The knight comes back to life.  He stands up... and lives!
  193. //---------------------------------------------------------------------------
  194. void()  knight_revive1   =[ $death10,  knight_revive3  ]
  195. {       self.nextthink = self.nextthink + PM_SleepTime();
  196.         self.health = 0;
  197. };
  198. void()  knight_revive2   =[ $death10,  knight_revive3  ]
  199. {       self.nextthink = self.nextthink + 5;    };
  200. void()  knight_revive3   =[ $death10,  knight_revive4  ]
  201. {       // see if ok to stand up
  202.         self.health = 75;
  203.         sound (self, CHAN_VOICE, "knight/idle.wav", 1, ATTN_IDLE);
  204.         self.solid = SOLID_SLIDEBOX;
  205.         if (!walkmove (0, 0))
  206.         {       self.think = knight_revive2;
  207.                 self.solid = SOLID_NOT;
  208.                 return;
  209.         }
  210. };
  211. void()  knight_revive4   =[ $death9,   knight_revive5  ] {};
  212. void()  knight_revive5   =[ $death8,   knight_revive6  ] {};
  213. void()  knight_revive6   =[ $death7,   knight_revive7  ] {};
  214. void()  knight_revive7   =[ $death6,   knight_revive8  ] {ai_painforward(1);};
  215. void()  knight_revive8   =[ $death5,   knight_revive9  ] {ai_painforward(1);};
  216. void()  knight_revive9   =[ $death4,   knight_revive10 ] {ai_painforward(2);};
  217. void()  knight_revive10  =[ $death3,   knight_revive11 ] {ai_painforward(4);};
  218. void()  knight_revive11  =[ $death2,   knight_revive12 ] {ai_painforward(8);};
  219. void()  knight_revive12  =[ $death1,   knight_revive13 ] {};
  220. void()  knight_revive13  =[ $stand1,   knight_run1     ]
  221. {       ai_painforward(10);
  222.         self.takedamage = DAMAGE_AIM;   };
  223.  
  224. //--------------------------------------------------------- New Code --------
  225. //  The knight comes back to life.  He springs to his feet!
  226. //---------------------------------------------------------------------------
  227. void()  knight_reviveb1  =[ $deathb11,  knight_reviveb3  ]
  228. {       self.nextthink = self.nextthink + PM_SleepTime();
  229.         self.health = 0;
  230. };
  231. void()  knight_reviveb2  =[ $deathb11,  knight_reviveb3  ]
  232. {       self.nextthink = self.nextthink + 5;    };
  233. void()  knight_reviveb3  =[ $deathb11,  knight_reviveb4  ]
  234. {       // see if ok to stand up
  235.         self.health = 75;
  236.         sound (self, CHAN_VOICE, "knight/idle.wav", 1, ATTN_IDLE);
  237.         self.solid = SOLID_SLIDEBOX;
  238.         if (!walkmove (0, 0))
  239.         {       self.think = knight_reviveb2;
  240.                 self.solid = SOLID_NOT;
  241.                 return;
  242.         }
  243. };
  244. void()  knight_reviveb4  =[ $deathb10, knight_reviveb5  ] {};
  245. void()  knight_reviveb5  =[ $deathb9,  knight_reviveb6  ] {};
  246. void()  knight_reviveb6  =[ $deathb8,  knight_reviveb7  ] {};
  247. void()  knight_reviveb7  =[ $deathb7,  knight_reviveb8  ] {ai_pain(3);};
  248. void()  knight_reviveb8  =[ $deathb6,  knight_reviveb9  ] {ai_pain(3);};
  249. void()  knight_reviveb9  =[ $deathb5,  knight_reviveb10 ] {ai_pain(4);};
  250. void()  knight_reviveb10 =[ $deathb4,  knight_reviveb11 ] {ai_pain(4);};
  251. void()  knight_reviveb11 =[ $deathb3,  knight_reviveb12 ] {};
  252. void()  knight_reviveb12 =[ $deathb2,  knight_reviveb13 ] {ai_pain(2);};
  253. void()  knight_reviveb13 =[ $deathb1,  knight_reviveb14 ] {ai_pain(8);};
  254. void()  knight_reviveb14 =[ $stand1,   knight_run1 ]
  255. {       ai_painforward(6);
  256.         self.takedamage = DAMAGE_AIM;   };
  257.  
  258. //---------------------------------------------------------------------------
  259.  
  260. void()    knight_die1    =[    $death1,    knight_die2    ] {};
  261. void()    knight_die2    =[    $death2,    knight_die3    ] {};
  262. void()    knight_die3    =[    $death3,    knight_die4    ] 
  263. {self.solid = SOLID_NOT;};
  264. void()    knight_die4    =[    $death4,    knight_die5    ] {};
  265. void()    knight_die5    =[    $death5,    knight_die6    ] {};
  266. void()    knight_die6    =[    $death6,    knight_die7    ] {};
  267. void()    knight_die7    =[    $death7,    knight_die8    ] {};
  268. void()    knight_die8    =[    $death8,    knight_die9    ] {};
  269. void()    knight_die9    =[    $death9,    knight_die10] {};
  270. //--------------------------------------------------------- Code Change -----
  271. void()  knight_die10 =
  272. {       if (PM_Revive())  knight_revive1();
  273.         else    knight_die11();
  274. };
  275. void()  knight_die11=[  $death10,       knight_die10] {};
  276. //---------------------------------------------------------------------------
  277.  
  278.  
  279. void()    knight_dieb1    =[    $deathb1,    knight_dieb2    ] {};
  280. void()    knight_dieb2    =[    $deathb2,    knight_dieb3    ] {};
  281. void()    knight_dieb3    =[    $deathb3,    knight_dieb4    ]     
  282. {self.solid = SOLID_NOT;};
  283. void()    knight_dieb4    =[    $deathb4,    knight_dieb5    ] {};
  284. void()    knight_dieb5    =[    $deathb5,    knight_dieb6    ] {};
  285. void()    knight_dieb6    =[    $deathb6,    knight_dieb7    ] {};
  286. void()    knight_dieb7    =[    $deathb7,    knight_dieb8    ] {};
  287. void()    knight_dieb8    =[    $deathb8,    knight_dieb9    ] {};
  288. void()    knight_dieb9    =[    $deathb9,    knight_dieb10] {};
  289. void()    knight_dieb10 = [    $deathb10,    knight_dieb11] {};
  290. //--------------------------------------------------------- Code Change -----
  291. void()  knight_dieb11 =
  292. {       if (PM_Revive())  knight_reviveb1();
  293.         else    knight_dieb12();
  294. };
  295. void()  knight_dieb12 = [       $deathb11,      knight_dieb11] {};
  296. //---------------------------------------------------------------------------
  297.  
  298.  
  299. void() knight_die =
  300. {
  301. // check for gib
  302.     if (self.health < -40)
  303.     {
  304.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  305.         ThrowHead ("progs/h_knight.mdl", self.health);
  306.         ThrowGib ("progs/gib1.mdl", self.health);
  307.         ThrowGib ("progs/gib2.mdl", self.health);
  308.         ThrowGib ("progs/gib3.mdl", self.health);
  309.         return;
  310.     }
  311.  
  312. // regular death
  313.     sound (self, CHAN_VOICE, "knight/kdeath.wav", 1, ATTN_NORM);
  314.     if (random() < 0.5)
  315.         knight_die1 ();
  316.     else
  317.         knight_dieb1 ();
  318. };
  319.  
  320.  
  321. /*QUAKED monster_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  322. */
  323. void() monster_knight =
  324. {
  325.     if (deathmatch)
  326.     {
  327.         remove(self);
  328.         return;
  329.     }
  330.     precache_model ("progs/knight.mdl");
  331.     precache_model ("progs/h_knight.mdl");
  332.  
  333.     precache_sound ("knight/kdeath.wav");
  334.     precache_sound ("knight/khurt.wav");
  335.     precache_sound ("knight/ksight.wav");
  336.     precache_sound ("knight/sword1.wav");
  337.     precache_sound ("knight/sword2.wav");
  338.     precache_sound ("knight/idle.wav");
  339.  
  340.     self.solid = SOLID_SLIDEBOX;
  341.     self.movetype = MOVETYPE_STEP;
  342.  
  343.     setmodel (self, "progs/knight.mdl");
  344.  
  345.     setsize (self, '-16 -16 -24', '16 16 40');
  346.     self.health = 75;
  347.  
  348.     self.th_stand = knight_stand1;
  349.     self.th_walk = knight_walk1;
  350.     self.th_run = knight_run1;
  351.     self.th_melee = knight_atk1;
  352.     self.th_pain = knight_pain;
  353.     self.th_die = knight_die;
  354.     
  355.     walkmonster_start ();
  356. };
  357.